package com.such.kit.calendar;

import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import com.such.kit.datacast.CastCommons;

public class DateCalculate {

	/** UNIT_YEAR：年 */
	public static final String UNIT_YEAR = "year";
	/** UNIT_MONTH：月 */
	public static final String UNIT_MONTH = "month";
	/** UNIT_WEEK：周 */
	public static final String UNIT_WEEK = "week";
	/** UNIT_DAY：日 */
	public static final String UNIT_DAY = "day";
	/** UNIT_HOUR：时 */
	public static final String UNIT_HOUR = "hour";
	/** UNIT_MINUTE：分 */
	public static final String UNIT_MINUTE = "minute";
	/** UNIT_SECOND：秒 */
	public static final String UNIT_SECOND = "second";

	private static Map<String, Integer> calcUnit = new HashMap<String, Integer>();
	static {
		calcUnit.put(UNIT_YEAR, Calendar.YEAR);
		calcUnit.put(UNIT_MONTH, Calendar.MONTH);
		calcUnit.put(UNIT_WEEK, Calendar.WEEK_OF_YEAR);
		calcUnit.put(UNIT_DAY, Calendar.DAY_OF_YEAR);
		calcUnit.put(UNIT_HOUR, Calendar.HOUR);
		calcUnit.put(UNIT_MINUTE, Calendar.MINUTE);
		calcUnit.put(UNIT_SECOND, Calendar.SECOND);
	}

	/**
	 * <p>方法名：add</p>
	 * <p>描述：提供时间的加法运算</p>
     * @param date Date 类型时间
     * @param amount 增加的数量 
     * @param unit 单位
	 * @return 计算后的时间
	 */
	public static Date add(Date date, Integer amount, String unit) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(calcUnit.get(unit), amount);
		return calendar.getTime();
	}

	/**
	 * <p>方法名：add</p>
	 * <p>描述：提供时间的加法运算</p>
	 * @param dateString 字符串类型时间
	 * @param format 日期格式
     * @param amount 增加的数量 
     * @param unit 单位
	 * @return 计算后的时间
	 * @throws ParseException
	 */
	public static String add(String dateString, String format, Integer amount, String unit) {
		Date date = add(CastCommons.stringToDate(dateString, format), amount, unit);
		return CastCommons.dateToString(date, format);
	}

	/**
	 * <p>方法名：subtract</p>
	 * <p>描述：提供时间的减法运算</p>
     * @param date Date 类型时间
     * @param amount 增加的数量 
     * @param unit 单位
	 * @return 计算后的时间
	 */
	public static Date subtract(Date date, Integer amount, String unit) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(calcUnit.get(unit), -amount);
		return calendar.getTime();
	}

	/**
	 * <p>方法名：subtract</p>
	 * <p>描述：提供时间的减法运算</p>
	 * @param dateString 字符串类型时间
	 * @param format 日期格式
     * @param amount 增加的数量 
     * @param unit 单位
	 * @return 计算后的时间
	 * @throws ParseException
	 */
	public static String subtract(String dateString, String format, Integer amount, String unit) {
		Date date = subtract(CastCommons.stringToDate(dateString, format), amount, unit);
		return CastCommons.dateToString(date, format);
	}

}
